package com.peakmain.wanandroid.mymodule.utils;

import android.graphics.PointF;

/**
 * author: peakmain
 * createdata：2019/7/22
 * mail: 2726449200@qq.com
 * desiption:贝塞尔曲线工具类
 */
public class BezierUtil {
    /**
     * B(t)=(1-t)^2*p0+2t*(1-t)*p1+t^2*p2,t∈[0,1]
     *
     * @param t  力度步长
     * @param p0 起始点
     * @param p1 控制点
     * @param p2 终止点
     * @return  t对应的点
     */
    public static PointF getPointFromQuadBezier(float t, PointF p0, PointF p1, PointF p2) {
        PointF pointF=new PointF();
        float temp=1-t;
        pointF.x=temp*temp*p0.x+temp*t*2*p1.x+t*t*p2.x;
        pointF.y=temp*temp*p0.y+temp*t*2*p1.y+t*t*p2.y;
        return pointF;
    }
    /**
     * B(t)=(1-t)^3*p0+3*p1*t*(1-t)^2+3*p2*t^2*(1-t)+p3*t^3，t∈[0,1]
     *
     * @param t  力度步长
     * @param point0 起始点
     * @param point1 控制点1
     * @param point2 控制点2
     * @param point3 结束点
     * @return  t对应的点
     */
    public static PointF getPointFromCubicBezier(float t, PointF point0, PointF point1, PointF point2,PointF point3){
        PointF pointF=new PointF();
        pointF.x = point0.x*(1-t)*(1-t)*(1-t)
                + 3*point1.x*t*(1-t)*(1-t)
                + 3*point2.x*t*t*(1-t)
                + point3.x*t*t*t;

        pointF.y = point0.y*(1-t)*(1-t)*(1-t)
                + 3*point1.y*t*(1-t)*(1-t)
                + 3*point2.y*t*t*(1-t)
                + point3.y*t*t*t;
        return pointF;
    }
}